﻿using System;
using System.Text;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Microsoft.Practices.EnterpriseLibrary.Data.Oracle;
using System.Data;
using System.Data.Common;

namespace ChBusiness
{
    /// <summary>
    /// 数据库一些基本操作
    /// </summary>
    /// <!--
    /// 创建人  : LiKun
    /// 创建时间: 2006-09-05
    /// -->
    public static class BasicOperate
    {
        #region 创建Database
        /// <summary>
        /// 创建NetOffice数据库
        /// </summary>
        /// <returns>NetOffice数据库对象</returns>
        /// <!--
        /// 创建人  : LiKun
        /// 创建时间: 2006-09-05
        /// -->
        public static Database CreateNetOfficeDataBase()
        {
            return DataBaseHelper.GetDatabase(GlobalSetting.NetOfficeConnection);
        }

        /// <summary>
        /// 执行sql并返回datatable
        /// </summary>
        /// <param name="strSql"></param>
        /// <returns></returns>
        public static DataTable GetTableBySql(string strSql)
        {
            Database dbTemp = CreateNetOfficeDataBase();
            return dbTemp.ExecuteDataSet(CommandType.Text, strSql).Tables[0];
        }

        /// <summary>
        /// 执行sql并
        /// </summary>
        /// <param name="strSql"></param>
        /// <returns></returns>
        public static int RunSql(string strSql)
        {
            Database dbTemp = CreateNetOfficeDataBase();
            return dbTemp.ExecuteNonQuery(CommandType.Text, strSql);
        }

        /// <summary>
        /// 执行sql并返回第一行第一列的值
        /// </summary>
        /// <param name="strSql"></param>
        /// <returns></returns>
        public static string GetValue(string strSql)
        {
            Database dbTemp = CreateNetOfficeDataBase();
            object objReturn = dbTemp.ExecuteScalar(CommandType.Text, strSql);

            if (!Convert.IsDBNull(objReturn) && objReturn!=null)
            {
                return objReturn.ToString();
            }
            return string.Empty;
        }
        #endregion

        #region 获取数据库数据

        #region String类型
        /// <summary>
        /// 获取数据库中的字符串
        /// </summary>
        /// <param name="obj">object类型的值</param>
        /// <returns>字符串</returns>
        /// <!--
        /// 创建人  : LiKun
        /// 创建时间: 2007-1-12
        /// -->
        public static string GetDataBaseString(object obj)
        {
            return GetDataBaseString(obj, false, string.Empty);
        }

       
        /// <summary>
        /// 获取数据库中的字符串。
        /// </summary>
        /// <param name="obj">object类型的值。</param>
        /// <param name="ifConvert">如果为 <c>true</c>，则强制转换类型。</param>
        /// <param name="defaultValue">默认值(obj为空，或转换失败时返回值)。</param>
        /// <returns>字符串。</returns>
        /// <!--
        /// 创建人  : LiKun
        /// 创建时间: 2007-1-12
        /// -->
        public static string GetDataBaseString(object obj, bool ifConvert, string defaultValue)
        {
            string result = defaultValue;
            if ((null != obj) && (DBNull.Value != obj))
            {
                if (ifConvert)
                {
                    try
                    {
                        result = Convert.ToString(obj);
                    }
                    catch
                    {
                        result = defaultValue;
                    }
                }
                else
                {
                    result = obj as string;
                    if (null == result)
                    {
                        result = defaultValue;
                    }
                }
            }
            return result;
        }
        #endregion

        #region int类型
        /// <summary>
        /// 获取数据库中的Int类型数据。
        /// </summary>
        /// <param name="obj">object类型的值。</param>
        /// <returns>Int类型数据(默认为0)。</returns>
        /// <!--
        /// 创建人  : LiKun
        /// 创建时间: 2007-1-12
        /// -->
        public static int GetDataBaseInt(object obj)
        {
            return GetDataBaseInt(obj, false, 0);
        }

       
        /// <summary>
        /// 获取数据库中的Int类型数据。
        /// </summary>
        /// <param name="obj">object类型的值。</param>
        /// <param name="ifConvert">如果为 <c>true</c>，则强制转换类型。</param>
        /// <param name="defaultValue">默认值(obj为空，或转换失败时返回值)。</param>
        /// <returns>Int类型数据(默认为0)。</returns>
        /// <!--
        /// 创建人  : LiKun
        /// 创建时间: 2007-1-12
        /// -->
        public static int GetDataBaseInt(object obj, bool ifConvert, int defaultValue)
        {
            int result = defaultValue;
            if ((null != obj) && (DBNull.Value != obj))
            {
                if (ifConvert)
                {
                    try
                    {
                        result = Convert.ToInt32(obj);
                    }
                    catch
                    {
                        result = defaultValue;
                    }
                }
                else
                {
                    if (obj is decimal)
                    {
                        try
                        {
                            result = decimal.ToInt32((decimal)obj);
                        }
                        catch
                        {
                            result = defaultValue;
                        }
                    }
                }
            }
            return result;
        }
        #endregion

        #endregion

       
    }
}